package OptimalAlgorithm.BitOperation;
//给你一个整数数组 nums，其中恰好有两个元素只出现一次，其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。
//eg:
//输入：nums = [1,2,1,3,2,5]
//输出：[3,5]
//解释：[5, 3] 也是有效的答案。
public class SingleNumberThree {
    public int[] singleNumber(int[] nums) {
        int num = 0;
        for(int i = 0;i < nums.length;i++){
            num ^= nums[i];
        }
        int x = num & -num;
        int num1 = 0;
        int num2 = 0;
        for (int i = 0; i < nums.length; i++) {
            if((nums[i] & x) == 0){
                num1 ^= nums[i];
            }else {
                num2 ^= nums[i];
            }
        }
        return new int[]{num1,num2};
    }
}
